<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Creating Libraries : CodeIgniter User Guide</title>

<style type='text/css' media='all'>@import url('../userguide.css');</style>
<link rel='stylesheet' type='text/css' media='all' href='../userguide.css' />

<script type="text/javascript" src="../nav/nav.js"></script>
<script type="text/javascript" src="../nav/prototype.lite.js"></script>
<script type="text/javascript" src="../nav/moo.fx.js"></script>
<script type="text/javascript" src="../nav/user_guide_menu.js"></script>

<meta http-equiv='expires' content='-1' />
<meta http-equiv= 'pragma' content='no-cache' />
<meta name='robots' content='all' />
<meta name='author' content='ExpressionEngine Dev Team' />
<meta name='description' content='CodeIgniter User Guide' />

</head>
<body>

<!-- START NAVIGATION -->
<div id="nav"><div id="nav_inner"><script type="text/javascript">create_menu('../');</script></div></div>
<div id="nav2"><a name="top"></a><a href="javascript:void(0);" onclick="myHeight.toggle();"><img src="../images/nav_toggle_darker.jpg" width="154" height="43" border="0" title="Toggle Table of Contents" alt="Toggle Table of Contents" /></a></div>
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
<td><h1>CodeIgniter User Guide Version 2.1.0</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
</div>
<!-- END NAVIGATION -->


<!-- START BREADCRUMB -->
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
<td id="breadcrumb">
<a href="http://codeigniter.com/">CodeIgniter Home</a> &nbsp;&#8250;&nbsp;
<a href="../index.html">User Guide Home</a> &nbsp;&#8250;&nbsp;
Creating Libraries
</td>
<td id="searchbox"><form method="get" action="http://www.google.com/search"><input type="hidden" name="as_sitesearch" id="as_sitesearch" value="codeigniter-kr.org/user_guide_2.1.0/" />Search User Guide&nbsp; <input type="text" class="input" style="width:200px;" name="q" id="q" size="31" maxlength="255" value="" />&nbsp;<input type="submit" class="submit" name="sa" value="Go" /></form></td>
</tr>
</table>
<!-- END BREADCRUMB -->

<br clear="all" />


<!-- START CONTENT -->
<div id="content">

<h1>나만의 라이브러리 만들기Creating Libraries</h1>

<p>우리가 라이브러리(Libraries)라고 말할때는 일반적으로 <kbd>libraries</kbd>
  폴더안에 위치하며 본 사용자 가이드에 설명되어있는 그것을 뜻합니다.하지만 여기서는 그 라이브러리가 아니라 님하가 어떻게 <dfn>application/libraries</dfn> 저장될 님하만의 라이브러리를 만들지를 설명합니다. 또한 그 라이브러리를 글로벌 라이버러리와 어떻게 분리하여 관리하는지도 설명합니다.</p>
<p>보너스로 CodeIgniter 는 기존의 라이브러리를 확장하여 ( <kbd>extend) </kbd> 님하만의 라이브러리를 만들수 있도록 지원합니다.아니면 이미 내장된 라이브러리를 <dfn>application/libraries</dfn> 에 저장된 동일한 버전 및 이름의 님하가 만든라이브러리도 대체할수도 있습니다.</p>

<p>요약하자면:</p>

<ul>
<li>남하는 완전히 새로운 라이브러리를 만들 수 있습니다..</li>
<li>내장된 라이브러리를 확장하여 여러분만의 라이브러리를 만들수 있습니다..</li>
<li>내장된 라이브러리를 대체할수도 있습니다..</li>
</ul>

<p>아래에 설명된 내용들은 이러한 3가지를 어떻게 할수 있는지 상세하게 설명합니다..</p>

  <p class="important"><strong>Note:</strong> 데이터베이스 클래스는 확장되거나 대체될 수 없습니다.그외
    모든 클래스는 확장,대체될 수 있습니다.</p>


<h2>저장</h2>

<p>님하의 라이브러리는 반드시 <dfn>application/libraries</dfn> 에 위치해야합니다.CodeIgniter 가 초기화 과정에서 그 디렉토리를 살펴보기 때문입니다.</p>


<h2>이름짓기 관례(Naming Conventions)</h2>

<ul>
<li>파일이름은 반드시 대문자로 시작해야합니다. 예제:&nbsp; <dfn>Myclass.php</dfn></li>
<li>클래스 선언부는 반드시 대문자로 시작해야합니다. 예:&nbsp;  <kbd>class Myclass</kbd></li>
<li>클래스명과 파일명은 반드시 동일해야합니다.</li>
</ul>


<h2>클래스 파일</h2>

<p>클래스는 반드시 아래의 프로토타입 형태를 따라야합니다.(Note:  <kbd>Someclass</kbd> 이라는 이름은 예를 든것입니다.):</p>

  <code>&lt;?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
  <br />
  <br />
  class Someclass {<br />
  <br />
  &nbsp;&nbsp;&nbsp;&nbsp;public function some_function()<br />
  &nbsp;&nbsp;&nbsp;&nbsp;{<br />
  &nbsp;&nbsp;&nbsp;&nbsp;}<br />
  }<br />
  <br />
  /* End of file Someclass.php */</code>
  <h2>여러분의 클래스를 사용하기</h2>

<p> 어떤 <a href="controllers.html">여러분의 </a><a href="controllers.html">콘트롤러</a> 함수에서도  여러분의 클래스를 아래와 같이 초기화 할수 있습니다.:</p>

<code>$this->load->library('<kbd>someclass</kbd>');</code>

<p><em>someclass</em> 는 파일 이름이고 ".php" 확장자는 붙이지 않습니다..여기에서 파일이름을 대문자로 쓰든 소문자로 쓰든CodeIgniter 는 상관하지않고인식합니다..</p>

<p>일단 로드되면 여러분의 클래스를 <kbd>lower case</kbd> 소문자 버전으로 사용해야합니다:</p>

<code>$this-><kbd>someclass</kbd>->some_function();&nbsp; // 객체는 항상 소문자로 사용되야합니다 </code>



<h2>여러분의 클래스 초기화 과정에 파라미터 넘겨주기 </h2>

<p>라이브러리 로드 함수에서 님하는 두번째 파라미터를 통하여 동적으로 데이터를 넘겨줄수 있습니다. 파라미터는 님하만의 클래스 생성자에 데이터를 넘겨줄것입니다.:</p>

<code>
$params = array('type' => 'large', 'color' => 'red');<br />
<br />
$this->load->library('Someclass', <kbd>$params</kbd>);</code>

<p>이렇게 사용하려면 님하는 반드시 님하만의클래스 생성자에 파라미터를처리하는 코드를 삽입해야합니다.:</p>

<code>&lt;?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');<br />
<br />
class Someclass {<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;public function __construct($params)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Do something with $params<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br /><br />
?&gt;</code>

<p class="important">여러분의 config 파일에 저장된 데이터를 파라미터로 전달할 수 있습니다..간단히 클래스의 파일이름과 동일한 config 파일을 생성하여 <dfn>application/config/</dfn> 폴더안에 저장하세요 .위에 기술된대로 동적으로 파라미터를 전달한다면  config 을 이용하는 방법은 비활성(will not be available)화 될것입니다.</p>







<h2>CodeIgniter 리소스를 여러분의 라이브러리와 함께 사용하기</h2>


<p>직접 만든 라이브러리에서 CodeIgniter에 내장된 리소스를 이용하려면<kbd> get_instance()</kbd> 함수를 이용합니다.
그함수는 CodeIgniter 의 부모객체(super object)를 리턴합니다.</p>

<p>일반적으로 당신이 만든 컨트롤러함수에서 <kbd>$this</kbd> 를 사용하여 CodeIgniter의 가능한 모든 함수들을 호출할것입니다.:</p>
<code>
<strong>$this</strong>->load->helper('url');<br />
<strong>$this</strong>->load->library('session');<br />
<strong>$this</strong>->config->item('base_url');<br />
etc.
</code>

<p>그러나<kbd> &nbsp;$this</kbd>는  컨트롤러,뷰,모델에서만 직접적으로 사용할 수 있습니다.</p>
<p>만약 당신이 만든 라이브러리(custom class) 에서 CodeIgniter의 클래스를 사용하고자한다면 아래와 같은 방법으로 해야합니다.:</p>
<p>먼저 CodeIgniter객체를 변수로 할당합니다.:</p>

<code>$CI =&amp; get_instance();</code>

<p>한번 할당한 후에는 <kbd>$this</kbd> 를 썼던 것대신에 새로할당한 변수($CI)를 대신 사용하면 됩니다:</p>

<code>
$CI =&amp; get_instance();<br />
<br />
$CI->load->helper('url');<br />
$CI->load->library('session');<br />
$CI->config->item('base_url');<br />
etc.
</code>

<p class="important"><strong>Note:</strong> 위에 사용된 get_instance() 는 객체를 참조로 넘겨줍니다.(&amp; 를 주목할것):
<br />
<br />
<var>$CI =&amp; get_instance();</var>
<br />
<br />
<kbd>이것은 매우 중요합니다. </kbd> 참조로 넘겨준다는것은 복사본이 아니라 원본의CodeIgniter 객체를 사용한다는것을 의미합니다.<br />
<br />
  </p>


<h2>내장된 라이브러리를 나만의 라이브러리로 대체하기 Replacing Native Libraries with Your Versions</h2>

<p>간단히 당신의 라이브러리 이름을 내장된 라이브러리와 완전히 동일하게 하면 CodeIgniter 는 내장 라이브러리대신 당신의 라이브러리를 사용합니다. 이렇게 하려면 파일이름과 클래스 선언부를 내장라이브러리와 동일하게 하면 됩니다. 예를 들어, 내장 <kbd>Email</kbd> 라이브러리를 대체하려면 <dfn>application/libraries/Email.php</dfn> 파일을 만들고 클래스를 아래와 같이 선언합니다. </p>
<p><code>class CI_Email {<br />
    <br />

}</code></p>
<p>주의 : 대부분의 내장라이브러리는 접두어<kbd>CI_</kbd>를 사용합니다. </p>

<p>당신의 라이브러리를 로드 하라면 표준 로딩 함수를 사용하면 됩니다.:</p>

<code>$this->load->library('<kbd>email</kbd>');</code>

<p class="important"><strong>Note:</strong> Database 클래스는 당신의 라이브러리로 대체될 수 없습니다..</p>


<h2>내장 라이브러리의 확장 Extending Native Libraries</h2>

<p> 내장 라이브러리에 몇몇 기능요소들을 추가하려한다면(아마 한두개의 함수추가) 라이브러리 자체를 바꾸는것은 심한 오버헤드가 될것입니다. 이럴때는 간단히 내장라이브러리를 확장하는것이 현명합니다. 라이브러리확장은 몇가지를 제외하고는 라이브러리대체와 거의 비슷합니다. </p>
<ul>
<li>클래스는 부모클래스(parent class)를 확장해야 한다..</li>
<li>당신의 클래스이름 및 파일이름은 <kbd>MY_</kbd> 로 시작해야한다.(이 접두어는 설정에서 변경할수 있습니다).</li>
</ul>

<p>예를 들어 ,내장 <kbd>Email</kbd> 클래스를 확장하고자 한다면 <dfn>application/libraries/</dfn><kbd>MY_Email.php</kbd> 파일을 생성하고 클래스를 아래와 같이 선언합니다:</p>

<code>
class MY_Email extends CI_Email {<br /><br />

}</code>

<p>Note: 만약 당신의 클래스에서 생성자를 사용하고자 한다면 부모클래스의 생성자를 그 내부에서 호출해야한다는걸 잊지마세요 :</p>


  <code> class MY_Email extends CI_Email {<br />
  <br />
  &nbsp;&nbsp;&nbsp;&nbsp;public function __construct()<br />
  &nbsp;&nbsp;&nbsp;&nbsp;{<br />
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parent::__construct();<br />
  &nbsp;&nbsp;&nbsp;&nbsp;}<br />
  }</code>
  <h3>당신의 확장 클래스를 로드하는법 (Loading Your Sub-class)</h3>

<p>새롭게 만든 확장 클래스는 일반적인 클래스 로드와 동일한 방법으로 로드합니다.이때 접두어는 적으시면 안됩니다..예를들어 ,위의 예에서 만든 Email 클래스의 확장 클래스를 로드할때 아래와같이 합니다.:</p>

<code>$this->load->library('<kbd>email</kbd>');</code>

<p>한번 로드한 후에는 다른 일반적인 방법(확장하기전의 원본클래스를 사용하듯)과 동일하게 사용하면됩니다. 위에서 만든 Email 클래스의 경우 아래와 같이 사용합니다.:</p>


<code>$this-><kbd>email</kbd>->some_function();</code>


<h3>나만의 접두어 설정 (Setting Your Own Prefix)</h3>

<p>나만의 접두어를 설정하려면 <dfn>application/config/config.php</dfn> 파일을 열어 아래 변수를찾으세요 :</p>

<code>$config['subclass_prefix'] = 'MY_';</code>

<p>주의 : 모든 CodeIgniter 내장 라이브러리는 접두어로 <kbd>CI_</kbd> 를 사용하므로 위 설정에서는 <kbd>CI_</kbd> 를 사용하지 마세요 .</p>



</div>
<!-- END CONTENT -->


<div id="footer">
<p>
Previous Topic:&nbsp;&nbsp;<a href="libraries.html">Using CodeIgniter Libraries</a>
&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
<a href="#top">Top of Page</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
<a href="../index.html">User Guide Home</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
Next Topic:&nbsp;&nbsp;<a href="drivers.html">Using CodeIgniter Drivers</a>
</p>
<p><a href="http://codeigniter.com">CodeIgniter</a> &nbsp;&middot;&nbsp; Copyright &#169; 2006 - 2011 &nbsp;&middot;&nbsp; <a href="http://ellislab.com/">Ellislab, Inc.</a></p>
</div>

</body>
</html>